home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Source Code / Libraries / PNL Libraries / MyAEGetData.p < prev    next >
Text File  |  1995-08-23  |  3KB  |  98 lines

  1. unit MyAEGetData;
  2.  
  3. interface
  4.  
  5.     uses
  6.         Types;
  7.  
  8.     procedure InitAEGetData (GetSelectionProc: UniversalProcPtr);
  9. { function GetSelectionProc(var reply:AppleEvent):OSErr; }
  10.     procedure FinishAEGetData;
  11.  
  12. implementation
  13.  
  14.     uses
  15.         AERegistry, AEObjects, MyCallProc;
  16.  
  17.     const
  18.         MaxPropLevel = 2; { or whatever number of levels you want to support }
  19.  
  20.     type
  21.         propArray = array[1..MaxPropLevel] of DescType;
  22.  
  23.     function CallGetSelection (var reply: AppleEvent; proc: UniversalProcPtr): OSErr;
  24.     begin
  25.         CallGetSelection := CallPascal24(@reply,proc);
  26.     end;
  27.  
  28.     var
  29.         getdata: ProcPtr;
  30.  
  31.     function PropertyOf (theSpec: AERecord; var propLevel: integer; var properties: propArray): boolean;
  32.         var
  33.             objSpec: AERecord;
  34.             typ, t, prop: DescType;
  35.             size: longint;
  36.             key: AEKeyword;
  37.             err: OSErr;
  38.     begin
  39.         PropertyOf := false; { we don't know this is a property yet }
  40.         if propLevel = 0 then begin { 0 means the Apple Event }
  41.             key := keyDirectObject;
  42.         end
  43.         else begin
  44.             key := keyAEContainer;
  45.         end;
  46.         if AEGetParamDesc(theSpec, key, typeAERecord, objSpec) = noErr then begin
  47.             if (AEGetParamPtr(objSpec, keyAEDesiredClass, typeType, typ, @t, 4, size) = noErr) & (t = cProperty) then begin
  48.                 if (AEGetParamPtr(objSpec, keyAEKeyForm, typeEnumerated, typ, @t, 4, size) = NoErr) & (t = formPropertyID) then begin { this is redundunt, won't hurt to make sure }
  49.                     if AEGetParamPtr(objSpec, keyAEKeyData, typeType, typ, @prop, 4, size) = NoErr then begin { which of property? }
  50.                         propLevel := propLevel + 1;
  51.                         properties[propLevel] := prop;
  52.                         if AESizeOfParam(objSpec, keyAEContainer, typ, size) = NoErr then begin { property of what }
  53.                             if typ = typeNull then begin { prop of application, we are done }
  54.                                 PropertyOf := true;
  55.                             end
  56.                             else if typ = typeObjectSpecifier then begin { from another object specifer }
  57.                                 if propLevel < MaxPropLevel then { only do it if we have not reach max level }
  58.                                     PropertyOf := PropertyOf(objSpec, propLevel, properties); { go down 1 level }
  59.                             end; { else it is an error }
  60.                         end;
  61.                     end;
  62.                 end;
  63.             end;
  64.             err := AEDisposeDesc(objSpec);
  65.         end;
  66.     end;
  67.  
  68.     function MyGetDataHandler (var event, reply: AppleEvent; theRefcon: longint): OSErr;
  69.         var
  70.             err: OSErr;
  71.             propLevel: integer;
  72.             properties: propArray;
  73.     begin
  74.         theRefcon:=theRefcon; { UNUSED! }
  75.         err := errAENoSuchObject;
  76.         propLevel := 0; { 0 means we are passing in an Apple Event }
  77.         if PropertyOf(event, propLevel, properties) & (propLevel = 2) then begin
  78.             if (properties[1] = pContents) & (properties[2] = pSelection) then begin { it is content of selection }
  79.                 err := CallGetSelection(reply, getdata);
  80. { do your thing and put the result in the reply }
  81.             end;
  82.         end;
  83.         MyGetDataHandler := err;
  84.     end;
  85.  
  86.     procedure InitAEGetData (GetSelectionProc: UniversalProcPtr);
  87.         var
  88.             junk: OSErr;
  89.     begin
  90.         getdata := GetSelectionProc;
  91.         junk := AEInstallEventHandler(kAECoreSuite, kAEGetData, NewAEEventHandlerProc(@MyGetDataHandler), 0, false);
  92.     end;
  93.  
  94.     procedure FinishAEGetData;
  95.     begin
  96.     end;
  97.  
  98. end.